const router = require('koa-router')(),
    fs = require('fs'),
    helper =require('../utils/helper');



// 路由守卫

router.use(async (ctx, next) => {
    // 主要进行验证判断， 如果登录才可以访问  即使用await next()进行放开
    if (!ctx.session.login) {
        // 重定向到登录界面
        ctx.redirect('/login');
        console.log('登录不成功');
        return false;
    } else {
        await next();
        console.log('已经登录成功');
    }
})

// 定义根路径
let root = __dirname.slice(0, -8);



router.get('/',ctx=>{
    // 模板引擎为admin.html  因为在app.js重定义了view为模板的文件夹
    ctx.render('admin')
})
// 以admin作为根节点，在admin.html的局部进行刷新，使用add.html文件
router.get('/add', ctx => {
    ctx.render('add');
})

// 接受表单数据
router.post('/add-do', ctx => {
    // 接受post从后端的前台传入后台的数据
    let res = ctx.request.body;

    // 将数据存储到数据库中
    
    // 后台日志中显示的对象 来源是从post请求提交到/add-do中 本次是add中提交的表单信息
   // 接受封面
   let poster = ctx.request.files.poster;
   // 上传封面
   if (poster) {
       let posterFileName = helper.upload(poster);
       
   }


   // 接受轮播 只有一个时，不是数组就是一个文件对象
   let tmpArr = [];
   let swiper = ctx.request.files.swiper;
   console.log(swiper);
   if (swiper) {
       // 判断是一个还是多个文件
       if (swiper instanceof Array) {
           // 多文件
           for (let i = 0; i < swiper.length; i++) {
               tmpArr.push(helper.upload(swiper[i]));
               
           }
       } else {
           // 单文件
           tmpArr.push(helper.upload(swiper))
       }
       
   }
   console.log(tmpArr);
   // 给前台返回响应,必须是success才可以
   
   ctx.body = 'success';



})

// 富文本编辑器的图片上传
router.post('/upload', ctx => {
      // 目标文件
      let dst =root + '/static/uploads'//
    
      // 接受附件
      let img = ctx.request.files.file;
  
      // 新建文件名
      let date = new Date();
      let dt = date.getTime();
  
      // 随机数
      let rand = parseInt(Math.random() * 1000)
      
      // 新文件名
      let newTitle = dt + rand + '';
      // console.log(newTitle);
  
      // 获取文件的扩展名
      let nameArr = img.name.split(".")
      let extension = nameArr[nameArr.length - 1];
  
      // 最终文件路径
      let lastFile = dst + '/' + newTitle + '.' + extension;
      
      // 上传到服务器
      // 创建可读流
      let readStream = fs.createReadStream(img.path);
      // 创建写入流
      let writeStream = fs.createWriteStream(lastFile);
  
      // 创建管道
      readStream.pipe(writeStream);
  
      // 返回结果给前端layedit  插入图片到富文本编辑器，并保存在uploads
      ctx.body={
          "code": 0 //0表示成功，其它失败
          ,"msg": "" //提示信息 //一般上传失败后返回
          ,"data": {
            "src": "http://localhost:3000/uploads/"+newTitle+'.'+extension
            ,"title": "" //可选
          }
        }
  
  
})




// 发布新闻
router.get('/newsAdd', ctx => {
    ctx.render('newsadd')
})
// 接受新闻数据  数据接受创建路由即可，不需要使用render进行模板显示
router.post('/newsAdd-do', ctx => {
    let { content, title, source } = ctx.request.body;
    // 获取模板数据
    let fileData = fs.readFileSync(root + '/templates/news.html','utf-8');
// 替换占位符
    fileData = fileData.replace(/#title#/g, title);
    fileData = fileData.replace(/#source#/g, source);
    fileData = fileData.replace(/#desc#/g, content);

    // 创建目录 以日期作为文件夹
    let date = new Date();
    let dirName = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
    let dst = root + '/static/' + dirName;

    // 创建目录前先判断目录是否存在
    if (!fs.existsSync(dst)) {
        fs.mkdirSync(dst);
    }
    // 创建文件
    // 定义文件名称
    let dstFileName = dst + '/' + date.getTime() + '.html';
    // 写入内容并创建文件
    try {
        fs.writeFileSync(dstFileName, fileData)
        ctx.body = 'success';
    } catch (err) {
        ctx.body = 'fail';

        console.log(err);
    }
})

module.exports=router.routes();